package com.findMoneyGame.pages.preloading {
	import flash.events.Event;

	import com.findMoneyGame.models.User;
	import com.findMoneyGame.events.UserEvent;
	import com.findMoneyGame.pages.preloading.ThePreloader;
	import com.findMoneyGame.pages.preloading.PreloaderState;

	public class UserDataFetchingState extends PreloaderState {
		private static const LOADING_PARTS_LOADED = 4;

		public function UserDataFetchingState (thePreloader : ThePreloader) { super(thePreloader); }
		public function start () {
			trace('Состояние прелоадера: запрос на получение данных о пользователе');
			// подписаться на события получения результатов запроса на получение данных пользователя
			user.addEventListener(UserEvent.FETCH_DATA_COMPLETE, requestComplete);
			user.addEventListener(UserEvent.FETCH_DATA_ERROR, requestError);
			// отправить запрос на получение данных
			user.fetchData();
			// подписаться на обновление полосы загрузки
			thePreloader.addEventListener(Event.ENTER_FRAME, checkFetchUserData);
		}

		private function requestComplete (e : Event) {
			unsubscribe();
			thePreloader.complete();
		}
		private function requestError (e : Event) {
			unsubscribe();
			thePreloader.addChild(new LoadingErrorPage());
		}
		private function unsubscribe () {
			thePreloader.removeEventListener(Event.ENTER_FRAME, checkFetchUserData);
			user.removeEventListener(UserEvent.FETCH_DATA_COMPLETE, requestComplete);
			user.removeEventListener(UserEvent.FETCH_DATA_ERROR, requestError);
		}
		private function checkFetchUserData (e : Event) {
			var user = user;
			var progress = user.bytesTotal == 0 ? 0 : user.bytesLoaded / user.bytesTotal / 16;
			thePreloader.setPreloadingPercent((LOADING_PARTS_LOADED + progress) / LOADING_PARTS_COUNT);
		}
	}
}